package com.vcoud.mundialbrasil2014.adapter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.vcoud.mbrasil2014.R;
import com.vcoud.mundialbrasil2014.CargardorImagen;
import com.vcoud.mundialbrasil2014.DB;

public class PartidosAdapter extends BaseExpandableListAdapter {
	private Activity context;
	private Map<String, ArrayList<HashMap<String, String>>> coleccionGrupos;
	private List<String> grupos;
	static final String KEY_PARTIDO_IDPARTIDO = "IDPartido";
	static final String KEY_PARTIDO_FK_EQUIPOLOCAL_NOMBRE = "FK_EquipoLocal_Nombre";
	static final String KEY_PARTIDO_FK_EQUIPOLOCAL_BANDERA = "FK_EquipoLocal_Bandera";
	static final String KEY_PARTIDO_FK_EQUIPOVISITANTE_NOMBRE = "FK_EquipoVisitante_Nombre";
	static final String KEY_PARTIDO_FK_EQUIPOVISITANTE_BANDERA = "FK_EquipoVisitante_Bandera";
	static final String KEY_PARTIDO_FK_SEDE = "FK_Sede";
	static final String KEY_PARTIDO_FECHA = "Fecha";
	static final String KEY_PARTIDO_NOMBREARBITRO = "NombreArbitro";
	static final String KEY_PARTIDO_GOLLOCAL = "GolLocal";
	static final String KEY_PARTIDO_GOLVISITANTE = "GolVisitante";
	static final String KEY_PARTIDO_GOLLOCALTIEMPOEXTRA = "GolLocalTiempoExtra";
	static final String KEY_PARTIDO_GOLVISITANTETIEMPOEXTRA = "GolVisitanteTiempoExtra";
	static final String KEY_PARTIDO_GOLLOCALPENAL = "GolLocalPenal";
	static final String KEY_PARTIDO_GOLVISITANTEPENAL = "GolVisitantePenal";
	static final String KEY_PARTIDO_FK_ETAPAMUNDIAL = "FK_EtapaMundial";
	public CargardorImagen cargarImagen;
	DB db;
	int layoutPadre;
	int layoutHijo;
	String mSeparador;

	public PartidosAdapter(Activity context, List<String> grupos,
			Map<String, ArrayList<HashMap<String, String>>> coleccionGrupos,
			int layoutPadre, int layoutHijo, String... mSeparador) {
		this.context = context;
		this.coleccionGrupos = coleccionGrupos;
		this.grupos = grupos;
		this.layoutPadre = layoutPadre;
		this.layoutHijo = layoutHijo;
		if (mSeparador.length > 0) {
			this.mSeparador = mSeparador[0];
		}
		cargarImagen = new CargardorImagen(context.getApplicationContext());
	}

	@Override
	public HashMap<String, String> getChild(int groupPosition, int childPosition) {
		return coleccionGrupos.get(grupos.get(groupPosition))
				.get(childPosition);
	}

	public void actualizar(List<String> grupos,
			Map<String, ArrayList<HashMap<String, String>>> coleccionGrupos) {
		this.grupos.clear();
		this.coleccionGrupos.clear();
		this.grupos = grupos;
		this.coleccionGrupos = coleccionGrupos;
		this.notifyDataSetChanged();
	}

	@Override
	public long getChildId(int groupPosition, int childPosition) {
		HashMap<String, String> equipo = new HashMap<String, String>();
		equipo = coleccionGrupos.get(grupos.get(groupPosition)).get(
				childPosition);
		long id = Long.parseLong(equipo.get(KEY_PARTIDO_IDPARTIDO));
		return id;
	}

	@Override
	public View getChildView(final int groupPosition, final int childPosition,
			boolean isLastChild, View convertView, ViewGroup parent) {
		final HashMap<String, String> grupo = getChild(groupPosition,
				childPosition);
		LayoutInflater inflater = context.getLayoutInflater();
		if (convertView == null) {
			convertView = inflater.inflate(layoutHijo, null);
		}
		cargarImagen = new CargardorImagen(context.getApplicationContext());

		// Instancia de los textviews
		TextView tvHora = (TextView) convertView.findViewById(R.id.hora);
		TextView tvEquipoLocal = (TextView) convertView
				.findViewById(R.id.equipo_local);
		TextView tvEquipoVisitante = (TextView) convertView
				.findViewById(R.id.equipo_visitante);
		ImageView ivEquipoLocal = (ImageView) convertView
				.findViewById(R.id.bandera_imagen_local);
		ImageView ivEquipoVisitante = (ImageView) convertView
				.findViewById(R.id.bandera_imagen_visitante);

		// Asignacion del texto a los textviews
		tvHora.setText(grupo.get(KEY_PARTIDO_FECHA));
		tvEquipoLocal.setText(grupo.get(KEY_PARTIDO_FK_EQUIPOLOCAL_NOMBRE));
		tvEquipoVisitante.setText(grupo
				.get(KEY_PARTIDO_FK_EQUIPOVISITANTE_NOMBRE));
		cargarImagen.mostrarImagen(
				grupo.get(KEY_PARTIDO_FK_EQUIPOLOCAL_BANDERA), ivEquipoLocal);
		cargarImagen.mostrarImagen(
				grupo.get(KEY_PARTIDO_FK_EQUIPOVISITANTE_BANDERA),
				ivEquipoVisitante);

		return convertView;
	}

	@Override
	public int getChildrenCount(int groupPosition) {
		return coleccionGrupos.get(grupos.get(groupPosition)).size();
	}

	@Override
	public Object getGroup(int groupPosition) {
		return grupos.get(groupPosition);
	}

	@Override
	public int getGroupCount() {
		return grupos.size();
	}

	@Override
	public long getGroupId(int groupPosition) {
		return groupPosition;
	}

	@Override
	public View getGroupView(int groupPosition, boolean isExpanded,
			View convertView, ViewGroup parent) {
		if (convertView == null) {
			LayoutInflater infalInflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			convertView = infalInflater.inflate(layoutPadre, null);
		}
		String fechaFinal = null;
		String grupo = (String) getGroup(groupPosition);

		try {
			String fechaInicial = grupo;
			SimpleDateFormat formatoInicial = new SimpleDateFormat(
					"yyyy-MM-dd", Locale.US);
			Date mFecha;
			mFecha = formatoInicial.parse(fechaInicial);
			SimpleDateFormat formatoFinal = new SimpleDateFormat(
					"EEE', 'dd' 'MMMM", Locale.getDefault());
			fechaFinal = formatoFinal.format(mFecha);

		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		TextView item = (TextView) convertView.findViewById(R.id.grupo);
		if (layoutPadre == R.layout.list_segunda_fase) {
			String[] grupoArray = grupo.split(mSeparador);
			String etapa = grupoArray[1];
			TextView tvEtapa = (TextView) convertView.findViewById(R.id.etapa);
			tvEtapa.setText(etapa);
		}

		item.setTypeface(null, Typeface.BOLD);
		item.setText(fechaFinal);
		return convertView;
	}

	@Override
	public boolean hasStableIds() {
		return true;
	}

	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		return true;
	}

}
